import os
import shutil
import logging
from datetime import datetime


def clear_report_folder(
        report_path="./test_case/report",
        log_dir="./test_case/logs"
):
    """
    清空report文件夹并在指定目录生成日志，修复路径问题
    """
    # 1. 处理日志目录路径（关键修复：将相对路径转换为绝对路径）
    log_dir_abs = os.path.abspath(log_dir)  # 转换为绝对路径，避免相对路径歧义
    print(f"日志目录绝对路径: {log_dir_abs}")  # 调试用：打印实际路径

    # 确保日志目录存在（增加错误捕获）
    try:
        os.makedirs(log_dir_abs, exist_ok=True)
        print(f"日志目录已准备好: {log_dir_abs}")
    except PermissionError:
        print(f"权限不足，无法创建日志目录: {log_dir_abs}")
        return
    except Exception as e:
        print(f"创建日志目录失败: {str(e)}")
        return

    # 2. 配置日志（使用绝对路径）
    log_filename = f"clear_report_{datetime.now().strftime('%Y%m%d')}.log"
    log_file_abs = os.path.join(log_dir_abs, log_filename)  # 日志文件绝对路径
    print(f"日志文件将生成在: {log_file_abs}")  # 调试用：打印日志文件路径

    # 清除已存在的日志配置（避免重复输出）
    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)

    # 配置日志
    logging.basicConfig(
        filename=log_file_abs,
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s',
        encoding='utf-8'
    )

    # 3. 清理报告文件夹（保持原有逻辑）
    if not os.path.exists(report_path):
        msg = f"文件夹 {report_path} 不存在，无需删除"
        print(msg)
        logging.info(msg)
        return

    for item in os.listdir(report_path):
        item_path = os.path.join(report_path, item)
        try:
            if os.path.isfile(item_path) or os.path.islink(item_path):
                os.unlink(item_path)
                msg = f"已删除文件: {item_path}"
            elif os.path.isdir(item_path):
                shutil.rmtree(item_path)
                msg = f"已删除文件夹及内容: {item_path}"
            print(msg)
            logging.info(msg)
        except Exception as e:
            msg = f"删除 {item_path} 失败: {str(e)}"
            print(msg)
            logging.error(msg)


if __name__ == "__main__":
    # 测试：指定日志目录（可替换为你的目标路径）
    clear_report_folder(
        report_path="./test_case/report",
        # 测试时建议先用绝对路径，确认是否生成
        log_dir="./test_case/logs"  # 相对路径示例
        # log_dir="D:/project/test_case/logs"  # Windows绝对路径示例
        # log_dir="/home/user/project/logs"    # Mac/Linux绝对路径示例
    )
